home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / phagexsources.lha / codesegments / ShadeBob-Seg.s < prev    next >
Encoding:
Text File  |  1993-08-21  |  7.1 KB  |  431 lines

  1.     Opt    c-
  2.     Section    "Spillage Shade Bob Code",Code_c
  3.  
  4.     IncDir    Df1:
  5.  
  6. Start    Bra.s    Setup
  7.     Bra.s    DoNext
  8.     Bra    DoVBL
  9. Setup    Bra    ResetPointers    
  10. DoNext    Bra    DoNextShade
  11.  
  12. DoVBL    Lea    CopperList(pc),a0
  13.     Move.l    a0,$Dff080
  14.     Moveq    #3,d7
  15. ShadeLoop1    Move.l    d7,-(sp)
  16.     Bsr    DoXYSine
  17.     Bsr    DoBob
  18.     Bsr    AddSines
  19.     Move.l    (sp)+,d7
  20.     Dbf    d7,ShadeLoop1
  21.  
  22.     Move.l    SubberDat(pc),d0
  23.     Lea    SineXPt(pc),a6
  24.     Sub.l    d0,(a6)
  25.     Lea    SineYPt(pc),a6
  26.     Sub.l    d0,(a6)
  27.     Lea    YSubDo(pc),a6    
  28.     Tst.w    (a6)
  29.     Beq    NoSubDo
  30.     Lea    YSub(pc),a6
  31.     Eor.w    #1,(a6)
  32. NoSubDo    Rts
  33.  
  34. AddSines    Move.l    AdderDat(pc),d0
  35.     Lea    SineXPt(pc),a6
  36.     Add.l    d0,(a6)
  37.     Lea    SineYPt(pc),a6
  38.     Add.l    d0,(a6)
  39.     Rts
  40.     
  41. DoNextShade    Lea    SineXPtTabPt1(pc),a6
  42.     Lea    SineXPt(pc),a5
  43.     Lea    SinePtTab1a(pc),a4
  44.     Bsr    SetVarLong
  45.     Lea    SineXPtTabPt2(pc),a6
  46.     Lea    SineXPt1(pc),a5
  47.     Lea    SinePtTab1b(pc),a4
  48.     Bsr    SetVarLong
  49.     Lea    SineYPtTabPt1(pc),a6
  50.     Lea    SineYPt(pc),a5
  51.     Lea    SinePtTab2a(pc),a4
  52.     Bsr    SetVarLong
  53.     Lea    SineYPtTabPt2(pc),a6
  54.     Lea    SineYPt1(pc),a5
  55.     Lea    SinePtTab2b(pc),a4
  56.     Bsr    SetVarLong
  57.     
  58.     Lea    SineXAddTabPt1(pc),a6
  59.     Lea    SineXAdd(pc),a5
  60.     Lea    SineAddTab1a(pc),a4
  61.     Bsr    SetVarLong
  62.     Lea    SineXAddTabPt2(pc),a6
  63.     Lea    SineXAdd1(pc),a5
  64.     Lea    SineAddTab1b(pc),a4
  65.     Bsr    SetVarLong
  66.     Lea    SineYAddTabPt1(pc),a6
  67.     Lea    SineYAdd(pc),a5
  68.     Lea    SineAddTab2a(pc),a4
  69.     Bsr    SetVarLong
  70.     Lea    SineYAddTabPt2(pc),a6
  71.     Lea    SineYAdd1(pc),a5
  72.     Lea    SineAddTab2b(pc),a4
  73.     Bsr    SetVarLong
  74.     
  75.     Lea    RevTabPt(pc),a6
  76.     Lea    YSubDo(pc),a5
  77.     Lea    RevTab(pc),a4
  78.     Bsr    SetVarWord
  79.     Lea    BobTabPt(pc),a6
  80.     Lea    BobNo(pc),a5
  81.     Lea    BobTab(pc),a4
  82.     Bsr    SetVarWord
  83.     
  84.     Moveq    #0,d0
  85.     Move.w    #32*6,d0
  86.     Mulu.w    BobNo(pc),d0
  87.     Lea    Bob(pc),a5
  88.     Add.l    a5,d0
  89.     Lea    BobGFX(pc),a5
  90.     Move.l    d0,(a5)
  91.  
  92.     Lea    AdderTabPt(pc),a6
  93.     Lea    AdderDat(pc),a5
  94.     Lea    SinePtTab1a(pc),a4
  95.     Bsr    SetVarLong
  96.     Lea    SubberTabPt(pc),a6
  97.     Lea    SubberDat(pc),a5
  98.     Lea    SinePtTab2b(pc),a4
  99.     Bsr    SetVarLong    
  100.     Rts
  101.     
  102. SetVarLong    Move.l    (a6),a0
  103.     Move.l    (a0)+,d0
  104.     Cmpi.l    #-1,d0
  105.     Beq    NoMoreTabL
  106.     Move.l    d0,(a5)
  107.     Move.l    a0,(a6)
  108.     Rts
  109. NoMoreTabL    Move.l    a4,(a6)
  110.     Bra    SetVarLong
  111.     
  112. SetVarWord    Move.l    (a6),a0
  113.     Move.w    (a0)+,d0
  114.     Cmpi.w    #-1,d0
  115.     Beq    NoMoreTabW
  116.     Move.w    d0,(a5)
  117.     Move.l    a0,(a6)
  118.     Rts
  119. NoMoreTabW    Move.l    a4,(a6)
  120.     Bra    SetVarWord
  121.  
  122. ResetPointers    Lea    Piccy(pc),a6
  123.     Move.l    a0,0(a6)
  124.     Move.w    d0,4(a6)
  125.     Lea    SineXPtTabPt1(pc),a6
  126.     Lea    SinePtTab1a(pc),a0
  127.     Move.l    a0,00(a6)
  128.     Lea    SinePtTab2a(pc),a0
  129.     Move.l    a0,04(a6)
  130.     Lea    SineAddTab1a(pc),a0
  131.     Move.l    a0,08(a6)
  132.     Lea    SineAddTab2a(pc),a0
  133.     Move.l    a0,12(a6)
  134.     Lea    SinePtTab1b(pc),a0
  135.     Move.l    a0,16(a6)
  136.     Lea    SinePtTab2b(pc),a0
  137.     Move.l    a0,20(a6)
  138.     Lea    SineAddTab1b(pc),a0
  139.     Move.l    a0,24(a6)
  140.     Lea    SineAddTab2b(pc),a0
  141.     Move.l    a0,28(a6)
  142.     Lea    RevTab(pc),a0
  143.     Move.l    a0,32(a6)
  144.     Lea    BobTab(pc),a0
  145.     Move.l    a0,36(a6)    
  146.     Lea    SinePtTab1b+8(pc),a0
  147.     Move.l    a0,40(a6)
  148.     Lea    SinePtTab2b+12(pc),a0
  149.     Move.l    a0,44(a6)
  150.     
  151.     Lea    CopperBPLS(pc),a0
  152.     Move.l    Piccy(pc),d0
  153.     Move.w    Planes(pc),d7
  154.     
  155. SetBPLLoop    Move.l    d0,d1
  156.     Move.w    d1,6(a0)
  157.     Swap    d1
  158.     Move.w    d1,2(a0)
  159.     Add.l    #$2e00,d0
  160.     Addq    #8,a0
  161.     Dbf    d7,SetBPLLoop
  162.  
  163.     Move.w    Planes(pc),d7
  164.     Lea    CopperCon(pc),a0
  165.     Addq    #1,d7
  166.     Asl.b    #4,d7
  167.     Or.b    #$02,d7
  168.     Move.b    d7,02(a0)
  169.     Rts
  170.  
  171. Piccy    Dc.l    $0000
  172. Planes    Dc.w    4
  173. NextPlane    Dc.l    $2e00
  174. BobGFX    Dc.l    0
  175. XPos    Dc.w    0
  176. YPos    Dc.w    0
  177. YSub    Dc.w    0
  178. YSubDo    Dc.w    0
  179. Size    Dc.w    (32*64)+3
  180. Mod    Dc.w    34
  181. BobNo    Dc.w    0
  182.  
  183. DoBob    Lea    $Dff000,a6
  184.     Moveq    #0,d0
  185.     Move.w    XPos(pc),d0
  186.     Move.w    YPos(pc),d1
  187.     Lea    YSub(pc),a5
  188.     Tst.w    (a5)
  189.     Beq    NoSubY
  190.     Move.w    #255,d2
  191.     Sub.w    d1,d2
  192.     Move.w    d2,d1
  193. NoSubY    Mulu.w    #40,d1
  194.     Ror.l    #4,d0
  195.     Asl.w    #1,d0
  196.     Add.w    d0,d1
  197.     Move.w    #0,d0
  198.     Addi.l    #$0f6a0000,d0
  199.     Move.l    d0,d3
  200.     Add.l    Piccy(pc),d1
  201.  
  202.     Bsr    BlitterWait
  203.     Move.l    #-1,$44(a6)
  204.     Move.w    #-1,$74(a6)
  205.     Lea    Buffer1(pc),a4
  206.     Move.l    a4,$54(a6)
  207.     Move.w    #0,$66(a6)
  208.     Move.w    #0,$64(a6)
  209.     Move.l    #$01f00000,$40(a6)
  210.     Move.w    Size(pc),$58(a6)
  211.     Move.l    a4,d0
  212.     Add.w    #$400,a4
  213.     Move.l    a4,d2
  214.     Move.w    Planes(pc),d5
  215.     Move.l    d1,d4
  216.     Move.w    Mod(pc),d6
  217.  
  218. DoShade    Bsr    BlitterWait
  219.     Move.l    d1,$4c(a6)
  220.     Move.l    d0,$50(a6)
  221.     Move.l    d2,$54(a6)
  222.     Move.w    d6,$62(a6)
  223.     Move.l    #0,$64(a6)
  224.     Move.l    #$0dc00000,$40(a6)
  225.     Move.w    Size(pc),$58(a6)
  226.  
  227.     Bsr    BlitterWait
  228.     Move.l    d1,$48(a6)
  229.     Move.l    d0,$4c(a6)
  230.     Move.l    BobGFX(pc),$50(a6)
  231.     Move.l    d1,$54(a6)
  232.     Move.w    d6,$60(a6)
  233.     Move.w    #0,$62(a6)
  234.     Move.w    d6,$66(a6)
  235.     Move.l    d3,$40(a6)
  236.     Move.w    Size(pc),$58(a6)
  237.     Exg.l    d0,d2
  238.     Add.l    NextPlane(pc),d1
  239.     Dbf    d5,DoShade
  240.     Rts
  241.  
  242. BlitterWait    Btst    #14,$2(a6)
  243.     Btst    #14,$2(a6)
  244.     Bne    BlitterWait
  245.     Rts
  246.     
  247. DoXYSine    Lea    XPos(pc),a4
  248.     Lea    SineXPt(pc),a5
  249.     Bsr    DoSine
  250.     Move.w    d3,(a4)
  251.     Lea    YPos(pc),a4
  252.     Lea    SineYPt(pc),a5
  253.     Bsr    DoSine
  254.     Move.w    d3,(a4)
  255.  
  256.     Lea    XPos(pc),a4
  257.     And.w    #$ff,0(a4)
  258.     And.w    #$ff,2(a4)
  259.     Add.w    #16,0(a4)
  260.     Rts
  261.  
  262. DoSine    Lea    SineData(pc),a6
  263.     Moveq    #0,d2
  264.     Moveq    #0,d3
  265.     Move.l    08(a5),d0
  266.     Move.l    12(a5),d1
  267.     Add.l    d0,00(a5)
  268.     Add.l    d1,04(a5)
  269.     And.l    #$ffe,00(a5)    
  270.     And.l    #$ffe,04(a5)    
  271.     Move.l    00(a5),d0
  272.     Move.l    04(a5),d1    
  273.     Move.w    (a6,d0.l),d2
  274.     Move.w    (a6,d1.l),d3    
  275.     Add.l    d2,d3    
  276.     Asl.w    #3,d3
  277.     Add.w    #4096,d3
  278.     Asr.w    #5,d3
  279.     Rts        
  280.  
  281. XSize    Dc.w    0
  282. YSize    Dc.w    0
  283.  
  284. SineXPt    Dc.l    122
  285. SineXPt1    Dc.l    72
  286. SineXAdd    Dc.l    12
  287. SineXAdd1    Dc.l    4
  288.  
  289. SineYPt    Dc.l    24
  290. SineYPt1    Dc.l    252
  291. SineYAdd    Dc.l    6
  292. SineYAdd1    Dc.l    14
  293.  
  294. SineXPtTabPt1    Dc.l    0
  295. SineXPtTabPt2    Dc.l    0
  296. SineXAddTabPt1    Dc.l    0
  297. SineXAddTabPt2    Dc.l    0
  298.  
  299. SineYPtTabPt1    Dc.l    0
  300. SineYPtTabPt2    Dc.l    0
  301. SineYAddTabPt1    Dc.l    0
  302. SineYAddTabPt2    Dc.l    0
  303.  
  304. RevTabPt    Dc.l    0
  305.  
  306. BobTabPt    Dc.l    0
  307.  
  308. AdderTabPt    Dc.l    0
  309. SubberTabPt    Dc.l    0
  310.  
  311. AdderDat    Dc.l    0
  312. SubberDat    Dc.l    0
  313.  
  314. SinePtTab1a    Dc.l    122,14,26,56,22,98,76,24,36,104,04,34,66,58,24,86,78,46,52
  315.     Dc.l    44,88,24,28,128,44,94,26,36,62,58,46,-1
  316. SinePtTab2a    Dc.l    42,18,06,116,28,54,66,26,34,112,106,08,102,94,-1
  317.  
  318. SinePtTab1b    Dc.l    14,26,56,22,98,76,24,36,128,44,94,26,36,62,58,46,-1
  319. SinePtTab2b    Dc.l    42,18,06,116,28,54,66,26,34,112,106,08,102,94,104,04,34,66,58,24,86,78,46,-1
  320.  
  321. SineAddTab1a    Dc.l    4,14,6,28,16,8,34,22,18,2,10,32,30,20,18,4,2,8,6,12,16,-1
  322. SineAddTab2a    Dc.l    8,2,16,34,28,40,22,32,18,4,14,22,26,18,14,4,8,22,-1
  323.  
  324. SineAddTab1b    Dc.l    8,32,18,4,14,22,22,18,4,2,8,6,12,16,-1
  325. SineAddTab2b    Dc.l    2,16,14,6,28,16,8,34,34,28,40,22,26,18,14,4,8,22,4,-1
  326.  
  327. BobTab    Dc.w    0,1,2,3,4,5,6,7,8,9,10,11,1,6,5,2,8,9,3,7,3,10,1,0,4,6,-1
  328.  
  329. RevTab    Dc.w    0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,1,-1
  330.  
  331. Cmv    Macro
  332.     Dc.w    \2,\1
  333.     EndM
  334.     
  335. Cwt    Macro
  336.     Dc.w    (\1*$100)+$01,$fffe
  337.     EndM    
  338.  
  339. Pal    Macro
  340.     Dc.w    $ffe1,$fffe
  341.     EndM    
  342.  
  343. EndCop    Macro
  344.     Dc.w    $ffff,$fffe
  345.     EndM    
  346.  
  347. CopperList    Cwt    $15
  348.     Cmv    $0200,BplCon0
  349.     Cmv    $00bb,BplCon1
  350.     Cmv    $000a,BplCon2
  351.     Cmv    $0034,DdfStrt
  352.     Cmv    $00c8,DdfStop
  353.     Cmv    $1681,DiwStrt
  354.     Cmv    $36c1,DiwStop
  355.     Cmv    $0,BplMod1
  356.     Cmv    $0,BplMod2
  357.     
  358.     Cwt    $25
  359.     
  360. CopperBPLS    Cmv    $c,BplPt0h
  361.     Cmv    $0,BplPt0l
  362.     Cmv    $c,BplPt1h
  363.     Cmv    $0,BplPt1l
  364.     Cmv    $c,BplPt2h
  365.     Cmv    $0,BplPt2l
  366.     Cmv    $c,BplPt3h
  367.     Cmv    $0,BplPt3l
  368.     Cmv    $c,BplPt4h
  369.     Cmv    $0,BplPt4l
  370.     
  371.     Cwt    $28
  372. CopperCon    Cmv    $1200,BplCon0
  373.  
  374.     Pal
  375.     Cwt    $38
  376.     Cmv    $8010,$09c
  377.     EndCop
  378.     
  379. Buffer1    Ds.b    ($400)
  380. Buffer2    Ds.b    ($400)
  381.  
  382. SineData    Incbin    SysData/Sine1024Bs.Dat
  383.     Incbin    SysData/Sine1024Bs.Dat
  384.  
  385. Bob    Incbin    BitMaps/ShadeBobs.Raw
  386.  
  387. ;Copper Registers
  388.  
  389. Cop1lc    = $080
  390. Cop1lch    = $080
  391. Cop1lcl    = $082
  392. Cop2lc    = $084
  393. Cop2lch    = $084
  394. Cop2lcl    = $086
  395. Copjmp1    = $088
  396. Copjmp2    = $08A
  397. Diwstrt    = $08E
  398. Diwstop    = $090
  399. Ddfstrt    = $092
  400. Ddfstop    = $094
  401. Dmacon    = $096
  402. Clxcon    = $098
  403. Intena    = $09A
  404. Intreq    = $09C
  405.  
  406. ;BitPlane Registers 
  407.  
  408. BplCon0    = $100
  409. BplCon1    = $102
  410. BplCon2    = $104
  411. BplMod1    = $108
  412. BplMod2    = $10a
  413.  
  414. BplPt0h    = $0e0
  415. BplPt0l    = $0e2
  416. BplPt1h    = $0e4
  417. BplPt1l    = $0e6
  418. BplPt2h    = $0e8
  419. BplPt2l    = $0ea
  420. BplPt3h    = $0ec
  421. BplPt3l    = $0ee
  422. BplPt4h    = $0f0
  423. BplPt4l    = $0f2
  424. BplPt5h    = $0f4
  425. BplPt5l    = $0f6
  426.  
  427.  
  428.  
  429.  
  430.  
  431.